home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1999 #2 / Amiga Plus CD - 1999 - No. 2.iso / System-Boost / Workbench / ToolManager / Source / global_debug.c < prev    next >
C/C++ Source or Header  |  1998-06-17  |  3KB  |  125 lines

  1. /*
  2.  * global_debug.c  V3.1
  3.  *
  4.  * ToolManager global debugging support routines
  5.  *
  6.  * Copyright (C) 1990-98 Stefan Becker
  7.  *
  8.  * This source code is for educational purposes only. You may study it
  9.  * and copy ideas or algorithms from it for your own projects. It is
  10.  * not allowed to use any of the source codes (in full or in parts)
  11.  * in other programs. Especially it is not allowed to create variants
  12.  * of ToolManager or ToolManager-like programs from this source code.
  13.  *
  14.  */
  15.  
  16. /* All stuff of this module is only included if DEBUG symbol is defined */
  17. #ifdef DEBUG
  18. /* Global data */
  19. ULONG DebugFlags[DEBUGFLAGENTRIES];
  20.  
  21. /* Local data */
  22. #define BUFLEN 256
  23. static char DebugBuffer[BUFLEN];
  24.  
  25. /* Initialize debug flags */
  26. #define DEBUGFUNCTION InitDebug
  27. void InitDebug(const char *var)
  28. {
  29.  int             i;
  30.  struct Library *DOSBase;
  31.  
  32.  /* Clear all debug flags */
  33.  for (i = 0; i < DEBUGFLAGENTRIES; i++) DebugFlags[i] = 0;
  34.  
  35.  /* Open local copy of dos.library */
  36.  if (DOSBase = OpenLibrary("dos.library", 39)) {
  37.  
  38.   /* Read debug environment variable */
  39.   if (GetVar(var, DebugBuffer, BUFLEN, GVF_GLOBAL_ONLY) != -1) {
  40.    char *p = DebugBuffer;
  41.  
  42.    KPutStr(DEBUGHEADER(Flags));
  43.  
  44.    /* For each entry in the debug flags array */
  45.    for (i = 0; i < DEBUGFLAGENTRIES; i++) {
  46.     ULONG flags = 0;
  47.  
  48.     /* Are there more flags? */
  49.     if (*p)
  50.  
  51.      /* Flag type? */
  52.      switch (*p++) {
  53.       case 'X': {    /* Hexadezimal */
  54.         char c;
  55.  
  56.         /* Get next hex digit */
  57.         while (c = *p) {
  58.  
  59.          /* Decode digit */
  60.          if      ((c >= '0') && (c <= '9')) flags = (flags << 4) | (c-'0');
  61.          else if ((c >= 'A') && (c <= 'F')) flags = (flags << 4) | (c-'A'+10);
  62.          else                               break; /* No hex digit */
  63.  
  64.          /* Next digit */
  65.          p++;
  66.         }
  67.        }
  68.        break;
  69.  
  70.       case 'Y': {    /* Binary */
  71.         char c;
  72.  
  73.         /* Get next binary digit */
  74.         while (c = *p) {
  75.  
  76.          /* Decode digit */
  77.          if      (c == '0') flags <<= 1;
  78.          else if (c == '1') flags = (flags << 1) | 1;
  79.          else               break; /* No binary digit */
  80.  
  81.          /* Next digit */
  82.          p++;
  83.         }
  84.        }
  85.        break;
  86.      }
  87.  
  88.     /* Store flags to array */
  89.     DebugFlags[i] = flags;
  90.     kprintf(" %08lx", flags);
  91.    }
  92.  
  93.    KPutChar('\n');
  94.   }
  95.  
  96.   /* Close library */
  97.   CloseLibrary(DOSBase);
  98.  }
  99. }
  100.  
  101. #ifdef DEBUGPRINTTAGLIST
  102. /* Print a tag list */
  103. void PrintTagList(const struct TagItem *tags)
  104. {
  105.  const struct TagItem *tstate = tags;
  106.  const struct TagItem *ti;
  107.  
  108.  /* Print Header */
  109.  KPutStr("Tag Name             | Tag Value\n"
  110.          "-------------------------------------------\n");
  111.  
  112.  while (ti = NextTagItem(&tstate)) {
  113.  
  114.   /* Print Tag line */
  115.   kprintf("%-20s | ", GetTagName(ti->ti_Tag));
  116.   kprintf(GetTagFormat(ti->ti_Tag), ti->ti_Data);
  117.   KPutChar('\n');
  118.  }
  119.  
  120.  /* Print footer */
  121.  KPutStr("-------------------------------------------\n");
  122. }
  123. #endif
  124. #endif
  125.